みなさんへの告知板


オンラインゲームからは離れました。これからはリアルょぅι゛ょで頑張ろうと思います


ミジンコゼミナール


ネットゲーム解析初心者向け講座、ミジンコゼミナール 開講!

多重起動、窓化の基礎をしらんやつは見ておけ。
読んでも理解できないやつは解析以前の問題だから文句いうな('A`)

ミジンコゼミナール:ネットゲーム解析講座一覧
1日目:入学/必要な教材 2日目:基本的なアセンブリ言語
3日目:Ollydbg の操作方法と演習 4日目:多重起動1(FindWindow)
5日目:多重起動2(CreateMutex) 6日目:多重起動3(EnumWindows、その他の方法)
7日目:ウィンドウについて
8日目:窓化(D8) 9日目:窓化(D9)
10日目:DLL について 11日目:何か作ってみよう
12日目:試験 13日目:プレゼント

2007年06月20日


テイルズはヨーダ

何となく TalesWeaver をかじってみました。
で、今まで知らなかったんだけど yoda's cryptor ってちゃんと Decryptor が
あったんだね、スレ覗いて初めて知ったよ。

結構面倒くさがり屋なんだけど去年探した時はなかったんだよね、まぁ探し方が
適当&悪かったのかもしれないけどさ。

wktkしながら今夜あたり帰宅したら早速ツールを試してみるですよ。


というわけで、


バイバイ!!面倒くさがりなのに面倒なことやってた昔の自分('A`)ヤーイ、バーヤバーヤ






つ 最後によーだと遊んだ過去メモ


06/12/14 FE蔵(yoda's crypto)


最初の複合。
LOOPD にきたら下のMOVへ BP or ハードBPを仕掛け、抜けたら解除。

007AB0A8 F9 STC
007AB0A9 90 NOP
007AB0AA F8 CLC
007AB0AB AA STOS BYTE PTR ES:[EDI]
007AB0AC ^E2 CC LOOPD SHORT BKUP_FEz.007AB07A


F7 で進めると LOOPD。BP仕掛けて飛ばす。
007AB0AE 8B21 MOV ESP,DWORD PTR DS:[ECX]
007AB0B0 A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
007AB0B1 97 XCHG EAX,EDI

CRC チェック。
XCHNG らへんで BP。
007AB310 8BF8 MOV EDI,EAX ; BKUP_FEz.<モジュールエントリーポイント>
007AB312 33C0 XOR EAX,EAX
007AB314 33DB XOR EBX,EBX
007AB316 33D2 XOR EDX,EDX
007AB318 8A07 MOV AL,BYTE PTR DS:[EDI]
007AB31A F7E2 MUL EDX
007AB31C 03D8 ADD EBX,EAX
007AB31E 42 INC EDX
007AB31F 47 INC EDI
007AB320 ^E2 F6 LOOPD SHORT BKUP_FEz.007AB318
007AB322 93 XCHG EAX,EBX
007AB323 C3 RETN



当分 F7 で進めていくと API のDecrypt。
OllyCmdBar -> bp LoadLibraryA にしたほうが楽。

007AB163 8985 FD264000 MOV DWORD PTR SS:[EBP+4026FD],EAX
007AB169 8D85 01274000 LEA EAX,DWORD PTR SS:[EBP+402701]
007AB16F E8 96000000 CALL BKUP_FEz.007AB20A
007AB174 8985 12274000 MOV DWORD PTR SS:[EBP+402712],EAX
007AB17A 8D85 16274000 LEA EAX,DWORD PTR SS:[EBP+402716]
007AB180 E8 85000000 CALL BKUP_FEz.007AB20A
007AB185 8985 25274000 MOV DWORD PTR SS:[EBP+402725],EAX
007AB18B 8D85 29274000 LEA EAX,DWORD PTR SS:[EBP+402729]
007AB191 E8 74000000 CALL BKUP_FEz.007AB20A
007AB196 8985 3C274000 MOV DWORD PTR SS:[EBP+40273C],EAX
007AB19C 8D85 40274000 LEA EAX,DWORD PTR SS:[EBP+402740]
007AB1A2 E8 63000000 CALL BKUP_FEz.007AB20A
007AB1A7 8985 4C274000 MOV DWORD PTR SS:[EBP+40274C],EAX
007AB1AD 8D85 50274000 LEA EAX,DWORD PTR SS:[EBP+402750]
007AB1B3 E8 52000000 CALL BKUP_FEz.007AB20A
007AB1B8 8985 5C274000 MOV DWORD PTR SS:[EBP+40275C],EAX
007AB1BE 8D85 60274000 LEA EAX,DWORD PTR SS:[EBP+402760]
007AB1C4 E8 41000000 CALL BKUP_FEz.007AB20A
007AB1C9 8985 6B274000 MOV DWORD PTR SS:[EBP+40276B],EAX
007AB1CF 8D85 6F274000 LEA EAX,DWORD PTR SS:[EBP+40276F]
007AB1D5 E8 30000000 CALL BKUP_FEz.007AB20A
007AB1DA 8985 78274000 MOV DWORD PTR SS:[EBP+402778],EAX
007AB1E0 8D85 7C274000 LEA EAX,DWORD PTR SS:[EBP+40277C]
007AB1E6 E8 1F000000 CALL BKUP_FEz.007AB20A
007AB1EB 8985 88274000 MOV DWORD PTR SS:[EBP+402788],EAX
007AB1F1 8D85 8C274000 LEA EAX,DWORD PTR SS:[EBP+40278C]
007AB1F7 E8 0E000000 CALL BKUP_FEz.007AB20A
007AB1FC 8985 98274000 MOV DWORD PTR SS:[EBP+402798],EAX
007AB202 8D85 BC1F4000 LEA EAX,DWORD PTR SS:[EBP+401FBC]
007AB208 50 PUSH EAX
007AB209 C3 RETN


何かやってるけどとりあえずスルー。

007AB2A2 6A 00 PUSH 0
007AB2A4 68 80000000 PUSH 80
007AB2A9 6A 03 PUSH 3
007AB2AB 6A 00 PUSH 0
007AB2AD 6A 01 PUSH 1
007AB2AF 68 00000080 PUSH 80000000
007AB2B4 57 PUSH EDI
007AB2B5 FF95 4C274000 CALL DWORD PTR SS:[EBP+40274C]


現在のセクションをチェック。
cmp されている値がセクション。
一番上の cmp でいえば、63727372 を逆から読み、ASCII変換すると、
72 73 72 63 ⇒ rsrc というセクション名。


007AB35C 813E 72737263 CMP DWORD PTR DS:[ESI],63727372 ⇒ ここは rsrc。下もひたすらセクション。
007AB362 75 05 JNZ SHORT FEzero_C.007AB369
007AB364 E9 9E000000 JMP FEzero_C.007AB407
007AB369 813E 2E727372 CMP DWORD PTR DS:[ESI],7273722E
007AB36F 75 05 JNZ SHORT FEzero_C.007AB376
007AB371 E9 91000000 JMP FEzero_C.007AB407
007AB376 813E 72656C6F CMP DWORD PTR DS:[ESI],6F6C6572
007AB37C 75 05 JNZ SHORT FEzero_C.007AB383
007AB37E E9 84000000 JMP FEzero_C.007AB407
007AB383 813E 2E72656C CMP DWORD PTR DS:[ESI],6C65722E
007AB389 75 02 JNZ SHORT FEzero_C.007AB38D
007AB38B EB 7A JMP SHORT FEzero_C.007AB407
007AB38D 813E 2E746C73 CMP DWORD PTR DS:[ESI],736C742E
007AB393 75 02 JNZ SHORT FEzero_C.007AB397
007AB395 EB 70 JMP SHORT FEzero_C.007AB407
007AB397 813E 2E656461 CMP DWORD PTR DS:[ESI],6164652E
007AB39D 75 02 JNZ SHORT FEzero_C.007AB3A1
007AB39F EB 66 JMP SHORT FEzero_C.007AB407
007AB3A1 837E 14 00 CMP DWORD PTR DS:[ESI+14],0
007AB3A5 74 06 JE SHORT FEzero_C.007AB3AD
007AB3A7 837E 10 00 CMP DWORD PTR DS:[ESI+10],0
007AB3AB 75 02 JNZ SHORT FEzero_C.007AB3AF
007AB3AD EB 58 JMP SHORT FEzero_C.007AB407
007AB3AF 60 PUSHAD


ここもセクションのチェックらしい。
そして JMP 命令で飛ぶ。

007AB3A1 837E 14 00 CMP DWORD PTR DS:[ESI+14],0
007AB3A5 74 06 JE SHORT FEzero_C.007AB3AD
007AB3A7 837E 10 00 CMP DWORD PTR DS:[ESI+10],0
007AB3AB 75 02 JNZ SHORT FEzero_C.007AB3AF
007AB3AD EB 58 JMP SHORT FEzero_C.007AB407

ちょこちょこ進めるとセクション毎の複合化。
ちゃんと追ってないので詳細不明。

007AB406 61 POPAD
007AB407 83C6 28 ADD ESI,28
007AB40A 42 INC EDX
007AB40B 66:3B57 06 CMP DX,WORD PTR DS:[EDI+6]
007AB40F ^0F85 47FFFFFF JNZ FEzero_C.007AB35C
007AB415 C3 RETN



やっと半分くらい。
ファイル全体のCRCのチェック。

007AB456 8B85 68254000 MOV EAX,DWORD PTR SS:[EBP+402568]
007AB45C 0BC0 OR EAX,EAX
007AB45E 74 0D JE SHORT FEzero_C.007AB46D
007AB460 3B85 C6274000 CMP EAX,DWORD PTR SS:[EBP+4027C6]
007AB466 74 05 JE SHORT FEzero_C.007AB46D
007AB468 E9 AF010000 JMP FEzero_C.007AB61C
007AB46D 8DB5 74254000 LEA ESI,DWORD PTR SS:[EBP+402574]


OR EAX, EAX のときに EAX の値には 08987396 が入る。
とりあえず CRC=08987396

DLL を読み込んだりダリダリ。

007AB499 833A 00 CMP DWORD PTR DS:[EDX],0
007AB49C ^75 F7 JNZ SHORT FEzero_C.007AB495
007AB49E 83C6 0C ADD ESI,0C
007AB4A1 837E 04 00 CMP DWORD PTR DS:[ESI+4],0
007AB4A5 ^75 E3 JNZ SHORT FEzero_C.007AB48A
007AB4A7 33D2 XOR EDX,EDX
007AB4A9 B8 05000000 MOV EAX,5
007AB4AE F7E1 MUL ECX
007AB4B0 50 PUSH EAX
007AB4B1 6A 00 PUSH 0
007AB4B3 FF95 5C274000 CALL DWORD PTR SS:[EBP+40275C]
007AB4B9 0BC0 OR EAX,EAX
007AB4BB 75 05 JNZ SHORT FEzero_C.007AB4C2
007AB4BD 83C4 04 ADD ESP,4
007AB4C0 61 POPAD
007AB4C1 C3 RETN


007AB4D7 E8 08000000 CALL FEzero_C.007AB4E4

007AB4E4 56 PUSH ESI
007AB4E5 57 PUSH EDI
007AB4E6 8BF0 MOV ESI,EAX
007AB4E8 8BF8 MOV EDI,EAX
007AB4EA AC LODS BYTE PTR DS:[ESI]
007AB4EB C0C8 04 ROR AL,4
007AB4EE AA STOS BYTE PTR ES:[EDI]
007AB4EF 803F 00 CMP BYTE PTR DS:[EDI],0
007AB4F2 ^75 F6 JNZ SHORT FEzero_C.007AB4EA
007AB4F4 5F POP EDI
007AB4F5 5E POP ESI
007AB4F6 C3 RETN


LoadLibrary の呼び出し。
このあとは間違いなく GetProceAddress がくるんだろうな。

007AB4F8 FF95 E8264000 CALL DWORD PTR SS:[EBP+4026E8] ; kernel32.LoadLibraryA

とか思ってたら DLL のリストをクリアするらしい。

007AB745 EB 04 JMP SHORT FEzero_C.007AB74B
007AB747 C600 00 MOV BYTE PTR DS:[EAX],0
007AB74A 40 INC EAX
007AB74B 8038 00 CMP BYTE PTR DS:[EAX],0
007AB74E ^75 F7 JNZ SHORT FEzero_C.007AB747
007AB750 C3 RETN

進めるとまた、CALL 007AB4E4 が見える。
これを何度も繰り返し読み込んだ DLL の情報をクリアしている。

007AB554 E8 8BFFFFFF CALL FEzero_C.007AB4E4

このときに EAX には GetProcAddress の文字が入っている。

007AB559 58 POP EAX
007AB55A 8BF8 MOV EDI,EAX
007AB55C 52 PUSH EDX
007AB55D 51 PUSH ECX
007AB55E 50 PUSH EAX
007AB55F 53 PUSH EBX
007AB560 FF95 EC264000 CALL DWORD PTR SS:[EBP+4026EC]
007AB566 0BC0 OR EAX,EAX
007AB568 75 07 JNZ SHORT FEzero_C.007AB571
007AB56A 59 POP ECX
007AB56B 5A POP EDX
007AB56C E9 AB000000 JMP FEzero_C.007AB61C
007AB571 59 POP ECX
007AB572 5A POP EDX
007AB573 60 PUSHAD
007AB574 F785 64254000 04>TEST DWORD PTR SS:[EBP+402564],4
007AB57E 74 0E JE SHORT FEzero_C.007AB58E
007AB580 8D85 37234000 LEA EAX,DWORD PTR SS:[EBP+402337]
007AB586 50 PUSH EAX
007AB587 8BC7 MOV EAX,EDI
007AB589 E9 B7010000 JMP FEzero_C.007AB745
007AB58E 61 POPAD

少し進めてジャンプ。必要なAPIを読み込み終わるまで 007AB559 への
ループが続く。

007AB591 EB 19 JMP SHORT FEzero_C.007AB5AC

次に DLL と API の情報は消してIAT の再構築。
めんどうだから POP ESI で検索してここまで飛ばす。

007AB5DF 57 PUSH EDI
007AB5E0 56 PUSH ESI
007AB5E1 8DBD CA274000 LEA EDI,DWORD PTR SS:[EBP+4027CA]
007AB5E7 8B77 04 MOV ESI,DWORD PTR DS:[EDI+4]
007AB5EA 8932 MOV DWORD PTR DS:[EDX],ESI
007AB5EC 2BC6 SUB EAX,ESI
007AB5EE 83E8 05 SUB EAX,5
007AB5F1 C606 E9 MOV BYTE PTR DS:[ESI],0E9
007AB5F4 8946 01 MOV DWORD PTR DS:[ESI+1],EAX
007AB5F7 8347 04 05 ADD DWORD PTR DS:[EDI+4],5
007AB5FB 5E POP ESI


またCRCチェックかしら?

007AB639 8B9D 6C254000 MOV EBX,DWORD PTR SS:[EBP+40256C]
007AB63F 33C3 XOR EAX,EBX
007AB641 74 08 JE SHORT FEzero_C.007AB64B
007AB643 EB 01 JMP SHORT FEzero_C.007AB646


F7 で進めると以下にたどり着く。

007AB65A AC LODS BYTE PTR DS:[ESI]
007AB65B 34 46 XOR AL,46
007AB65D 2AC3 SUB AL,BL
007AB65F C0C0 02 ROL AL,2
007AB662 AA STOS BYTE PTR ES:[EDI]
007AB663 43 INC EBX
007AB664 ^E2 F4 LOOPD SHORT FEzero_C.007AB65A

パック基本はループ処理だがここの LOOPD は見てると面白いかも。
分かりやすくコードが変わってく。

007AB666 8D85 9C274000 LEA EAX,DWORD PTR SS:[EBP+40279C]
007AB66C 50 PUSH EAX ⇒ EAX には IsDebuggerPresent の文字が見れる。
007AB66D FFB5 FD264000 PUSH DWORD PTR SS:[EBP+4026FD]  ⇒ 何やら Kernel32 を入れている。
007AB673 FF95 EC264000 CALL DWORD PTR SS:[EBP+4026EC] ⇒ GetProcAddress で IsDebuggerPresent のアドレス読み込み。
007AB679 0BC0 OR EAX,EAX
007AB67B 74 08 JE SHORT FEzero_C.007AB685
007AB67D FFD0 CALL EAX
007AB67F 0BC0 OR EAX,EAX
007AB681 74 02 JE SHORT FEzero_C.007AB685
007AB683 61 POPAD
007AB684 C3 RETN

↑ 007AB673 にある CALL で IsDebuggerPresent 命令を呼び出す。
007AB67F の EAX をゼロにして回避し、その後の POPAD に BP を仕掛け Shift + F9 で
例外処理も飛ぶ。
すると以下の場所に来る。

007AB738 61 POPAD
007AB739 50 PUSH EAX
007AB73A 33C0 XOR EAX,EAX
007AB73C 64:FF30 PUSH DWORD PTR FS:[EAX]
007AB73F 64:8920 MOV DWORD PTR FS:[EAX],ESP
007AB742 EB 01 JMP SHORT FEzero_C.007AB745
007AB744 8700 XCHG DWORD PTR DS:[EAX],EAX
007AB746 0000 ADD BYTE PTR DS:[EAX],AL
007AB748 0000 ADD BYTE PTR DS:[EAX],AL
007AB74A 0000 ADD BYTE PTR DS:[EAX],AL
007AB74C 0000 ADD BYTE PTR DS:[EAX],AL
007AB74E 0000 ADD BYTE PTR DS:[EAX],AL

2回ほど Shift + F9 を実施 -> 00401000 に飛ぶ。

00401000 68 DB 68 ; CHAR 'h'

OEPゲット -> ダンプ。
あとは適当に ASProtect 解除するだけ。


2007年06月12日


教えて君

うーん、みんな元気にしてますか('A`)ノ

ちょっくら日記の更新停滞してますが今日はみんなの意見を
聞かせて欲しいのです。まぁアンケートってやつです…。
早速ですが教えて欲しいのは以下の項目。

1.過疎ってるゲーム
2.なぜか人が多いゲーム
3.蔵がいぢりやすいゲーム
4.蔵がいぢりにくいゲーム
5.長く続けられるゲーム
6.短命だと思うゲーム

人それぞれ感性は違うので特に理由は明記しなくておkです。
それと全部答えなくてもパッと思いついた項目だけでも充分です。

ん、何たくらんでるんだお前は?と思った方は…
四の五の言わずに協力しておやりなさい(ぉぃ

というわけでどうぞ宜しくですm(_ _)m
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。